home *** CD-ROM | disk | FTP | other *** search
- SUBROUTINE CHKCHR
- C Checks that incorrect relational operators
- C are not used to compare
- C character strings in IF clauses.
- C INPUT ; current statement description
- C OUTPUT ; NFAULT
- C
- include 'PARAM.h'
- include 'ALCAZA.h'
- include 'CLASS.h'
- include 'FLAGS.h'
- include 'CURSTA.h'
- include 'STATE.h'
- include 'USSTMT.h'
- include 'USUNIT.h'
- include 'USLTYD.h'
- include 'USIGNO.h'
- include 'CHECKS.h'
- LOGICAL BTEST
- IF(UNFLP) RETURN
- IF(.NOT.LCHECK(42)) RETURN
- ICL1 = ICURCL(1)
- IF(.NOT.LIFF(ICL1)) RETURN
- C Find end of IF
- ILOC = INDEX(SSTA(:NCHST),'(')
- IF(ILOC.EQ.0) RETURN
- CALL SKIPLV(SSTA,ILOC+1,NCHST,.FALSE.,ILOCE,ILEV)
- IF(ILOCE.EQ.0) RETURN
- DO 40 I=1,NSNAME
- C Looping over variable names in the statement
- IF(NSSTRT(I).GT.ILOCE) RETURN
- C Variable is inside IF clause
- IF(.NOT.BTEST(NAMTYP(ISNAME+I),5)) GOTO 40
- C Character variable
- DO 10 IPOS=NSSTRT(I)-1,ILOC+1,-1
- IF(SSTA(IPOS:IPOS).EQ.' ') GOTO 10
- IF(SSTA(IPOS:IPOS).EQ.'(') GOTO 20
- IF(SSTA(IPOS:IPOS).NE.'.') GOTO 20
- C Check for incorrect relational operators
- IF(SSTA(IPOS-3:IPOS).EQ.'.OR.') GOTO 20
- IF(SSTA(IPOS-3:IPOS).EQ.'.EQ.') GOTO 20
- IF(SSTA(IPOS-3:IPOS).EQ.'.NE.') GOTO 20
- IF(SSTA(IPOS-4:IPOS).EQ.'.AND.') GOTO 20
- IF(ILOCE-ILOC.GT.20) ILOCE=ILOC+20
- WRITE(MZUNIT,500) SSTA(ILOC:ILOCE)
- NFAULT = NFAULT + 1
- RETURN
- 10 CONTINUE
- 20 ILEV = 0
- DO 30 IPOS=NSEND(I)+1,ILOCE-1
- IF(SSTA(IPOS:IPOS).EQ.' ') GOTO 30
- IF(SSTA(IPOS:IPOS).EQ.'(') ILEV=ILEV+1
- IF(SSTA(IPOS:IPOS).EQ.')') ILEV=ILEV-1
- IF(SSTA(IPOS:IPOS).EQ.')') GOTO 30
- IF(ILEV.NE.0) GOTO 30
- IF(SSTA(IPOS:IPOS).NE.'.') GOTO 40
- IF(SSTA(IPOS:IPOS+3).EQ.'.OR.') GOTO 40
- IF(SSTA(IPOS:IPOS+3).EQ.'.EQ.') GOTO 40
- IF(SSTA(IPOS:IPOS+3).EQ.'.NE.') GOTO 40
- IF(SSTA(IPOS:IPOS+4).EQ.'.AND.') GOTO 40
- IF(ILOCE-ILOC.GT.20) ILOCE=ILOC+20
- WRITE(MZUNIT,500) SSTA(ILOC:ILOCE)
- NFAULT = NFAULT + 1
- RETURN
- 30 CONTINUE
- 40 CONTINUE
- RETURN
- 500 FORMAT(1X,'!!! WARNING ... IF CLAUSE ',A,' USES',
- +' INCORRECT RELATIONAL OPERATORS FOR CHARACTER TYPE')
- END
-